import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTableWidget, QTableWidgetItem, QVBoxLayout, QHeaderView

class TableExample(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("QTableWidget Example")
        self.setGeometry(100, 100, 400, 300)

        # 创建表格
        self.table = QTableWidget(self)
        self.table.setRowCount(4)  # 设置行数
        self.table.setColumnCount(3)  # 设置列数
        self.table.setHorizontalHeaderLabels(["Name", "Age", "City"])  # 设置水平表头
        self.table.setVerticalHeaderLabels(["Row1", "Row2", "Row3", "Row4"])  # 设置垂直表头

        # 填充数据
        data = [
            ["Alice", "25", "New York"],
            ["Bob", "30", "Los Angeles"],
            ["Charlie", "35", "Chicago"],
            ["David", "40", "Houston"]
        ]
        for row in range(len(data)):
            for col in range(len(data[row])):
                self.table.setItem(row, col, QTableWidgetItem(data[row][col]))

        # 设置行表头（垂直表头）的宽度
        self.table.verticalHeader().setDefaultSectionSize(30)  # 设置默认行表头宽度为 30 像素
        self.table.verticalHeader().resizeSection(0, 40)  # 设置第 1 行的行表头宽度为 40 像素

        # 设置列表头（水平表头）的高度
        self.table.horizontalHeader().setDefaultSectionSize(100)  # 设置默认列表头高度为 100 像素
        self.table.horizontalHeader().resizeSection(0, 120)  # 设置第 1 列的列表头高度为 120 像素

        # 允许用户手动调整行表头宽度和列表头高度
        self.table.verticalHeader().setSectionResizeMode(QHeaderView.Interactive)
        self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Interactive)

        # 设置表格的布局
        layout = QVBoxLayout()
        layout.addWidget(self.table)
        self.setLayout(layout)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = TableExample()
    ex.show()
    sys.exit(app.exec_())




